﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using PMServiceDesk.BusinessLogic;
using PMServiceDesk.DataType;
using PMServiceDesk.Utils.Interfaz;
using PMServiceDesk.Parameters.Constantes;

namespace PMServiceDesk.Web.AppCode
{
    public class RolView
    {
        public RolType Rol { get; set; }
        public bool NuevoRegistro { get; set; }
        public List<RolType> Roles { get; set; }
        public int TotalRegistros { get; set; }
        public List<PermisoRolPaqueteTrabajoType> PermisosPaqueteTrabajo { get; set; }
    }

    public static class RolIU
    {
        public static RolView Listar(RolType registroBusqueda, int paginaActual, int cantidadMostrar, string orderBy)
        {
            RolLogic logic = new RolLogic();

            RolView view = new RolView();

            registroBusqueda.ProyectoId = Sesion.Usuario.ProyectoId;

            view.Roles = logic.CargarExploradorPaginado(registroBusqueda, paginaActual, cantidadMostrar, orderBy);
            view.TotalRegistros = view.Roles.Capacity;

            return view;
        }

        public static string ExportarExcel(RolType registroBusqueda, List<GridJSONField> gridFields)
        {
            RolLogic logic = new RolLogic();

            registroBusqueda.ProyectoId = Sesion.Usuario.ProyectoId;

            List<RolType> l = logic.CargarExploradorPaginado(registroBusqueda);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "Roles", ExtensionesArchivos.Excel2003);
        }

        public static RolView Cargar(string rolId)
        {
            RolView view = new RolView();

            view.Rol = new RolLogic().CargarPorId(rolId);
            view.PermisosPaqueteTrabajo = new PermisoRolPaqueteTrabajoLogic().CargarPermisos(rolId);

            return view;
        }

        public static RolView Grabar(RolType registro)
        {
            RolView view = new RolView();
            view.NuevoRegistro = (registro.Id == "0");

            registro.ProyectoId = Sesion.Usuario.ProyectoId;

            RolLogic logic = new RolLogic();
            logic.Grabar(registro);

            view.Rol = registro;

            return view;
        }

        public static PermisoRolPaqueteTrabajoType CheckPermiso(PermisoRolPaqueteTrabajoType registro)
        {
            new PermisoRolPaqueteTrabajoLogic().Grabar(registro);

            return registro;
        }

        public static TransicionEstadoType CheckTransicion(TransicionEstadoType registro)
        {
            new TransicionEstadoLogic().Grabar(registro);

            return registro;
        }
    }

    public class DocumentoTransicionEstadoView
    {
        public List<DocumentoTransicionEstadoType> DocumentosTransicionEstado { get; set; }
        public DocumentoTransicionEstadoType DocumentoTransicionEstado { get; set; }
        public bool NuevoRegistro { get; set; }
        public int TotalRegistros { get; set; }
        public List<GridJSONDataSource> GridJSONDataSources { get; set; }
    }

    public static class DocumentoTransicionEstadoIU
    {
        public static DocumentoTransicionEstadoView Listar(DocumentoTransicionEstadoType registroBusqueda, int paginaActual, int cantidadMostrar, string orderBy, bool primerCarga)
        {
            DocumentoTransicionEstadoView view = new DocumentoTransicionEstadoView();

            view.DocumentosTransicionEstado = new DocumentoTransicionEstadoLogic().CargarExploradorPaginado(registroBusqueda, paginaActual, cantidadMostrar, orderBy);
            view.TotalRegistros = view.DocumentosTransicionEstado.Capacity;

            view.GridJSONDataSources = new List<GridJSONDataSource>();

            if (!primerCarga) return view;

            view.GridJSONDataSources.Add(new GridJSONDataSource { DataFieldEdit = "ExtensionDocumentoId", DataSource = SoporteLogic.ParametrosAbreviaturaPorDominio(Dominios.ExtensionArchivo, "1") });

            return view;
        }

        public static string ExportarExcel(DocumentoTransicionEstadoType registroBusqueda, List<GridJSONField> gridFields)
        {
            List<DocumentoTransicionEstadoType> l = new DocumentoTransicionEstadoLogic().CargarExploradorPaginado(registroBusqueda);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "DocumentosTransicionEstado", ExtensionesArchivos.Excel2003);
        }

        public static DocumentoTransicionEstadoView Grabar(DocumentoTransicionEstadoType registro)
        {
            DocumentoTransicionEstadoView view = new DocumentoTransicionEstadoView();

            view.NuevoRegistro = (registro.Id == "0");
             
            new DocumentoTransicionEstadoLogic().Grabar(registro);

            view.DocumentoTransicionEstado = registro;

            return view;
        }

        public static DocumentoTransicionEstadoView Cargar(string id)
        {
            DocumentoTransicionEstadoView view = new DocumentoTransicionEstadoView();

            view.GridJSONDataSources = new List<GridJSONDataSource>();
            view.GridJSONDataSources.Add(new GridJSONDataSource { DataFieldEdit = "ExtensionDocumentoId", DataSource = SoporteLogic.ParametrosAbreviaturaPorDominio(Dominios.ExtensionArchivo, "1") });


            if (id == null) view.DocumentoTransicionEstado = new DocumentoTransicionEstadoType();
            else view.DocumentoTransicionEstado = new DocumentoTransicionEstadoLogic().CargarPorId(id);

            return view;
        }

        public static void Eliminar(string id)
        {
            new DocumentoTransicionEstadoLogic().Eliminar(id);
        }
    }
}